// 导入 pinia
import { defineStore } from 'pinia'

// 导入api
import { getCategory1, getCategory2, getCategory3 } from '@/api/categorySelector'
import { ElMessage } from 'element-plus'
// 导入 一级分类的数据类型
import type { dataModel } from '@/api/categorySelector'

// 定义state中数据的类型规范
interface StateModel {
  category1Id: undefined | number
  category2Id: undefined | number
  category3Id: undefined | number
  category1List: dataModel[]
  category2List: dataModel[]
  category3List: dataModel[]
}
// 创建仓库并暴露出去
const useCategoryStore = defineStore('', {
  // 声明数据
  state: (): StateModel => ({
    category1Id: undefined,
    category2Id: undefined,
    category3Id: undefined,
    category1List: [],
    category2List: [],
    category3List: []
  }),
  // 声明方法
  actions: {
    // 获取一级分类的下拉数据
    async getcategory1List() {
      // 调用api 发送请求
      // this.category2Id = undefined
      // this.category2List = []
      // this.category3Id = undefined
      // this.category3List = []
      // this.category1Id = undefined
      try {
        const res = await getCategory1()
        // console.log(res) // 测试
        if (res.code === 200) {
          // 将响应体数据存储到state中
          this.category1List = res.data
        }
      } catch (error) {
        // 提示
        ElMessage.error('获取第一分类下拉数据失败')
      }
    },

    // 获取二级分类的下拉数据
    async getcategory2List() {
      // 调用api 发送请求
      try {
        // 在发送请求之前,清除上一次的请求所返回的二级和三级下拉数据
        this.category2Id = undefined
        this.category2List = []
        this.category3Id = undefined
        this.category3List = []

        const res = await getCategory2(this.category1Id as number)
        // console.log(res) // 测试
        if (res.code === 200) {
          // 将返回的数据存储起来
          this.category2List = res.data
        }
      } catch (error) {
        // 提示
        ElMessage.error('获取二级下拉数据失败,请重试')
      }
    },

    // 获取三级分类的下拉数据
    async getcategory3List() {
      // 调用api 发送请求
      try {
        // 在发送请求之前,清除上一次请求所返回的三级下拉数据
        this.category3Id = undefined
        this.category3List = []

        const res = await getCategory3(this.category2Id as number)
        // console.log(res) // 测试
        if (res.code === 200) {
          // 将数据进行存储
          this.category3List = res.data
        }
      } catch (error) {
        // 提示
        ElMessage.error('获取三级分类下拉数据失败,请重试')
      }
    }
  }
})
// 默认导出
export default useCategoryStore
